[Dies ist ein Fallbeispiel, das in einem separaten Fenster angezeigt wird. So können Sie das Beispiel und ein beliebiges anderes Hilfethema gleichzeitig betrachten. Das Fenster des Fallbeispiels lässt sich verschieben, in seiner Grösse ändern und über das Schliessfeld verlassen]
Benutzereingaben sind fehleranfällig. Damit eine fehlerhafte Eingabe später keinen Schaden anrichtet, prüft der Entwickler am besten früh, ob die Eingabe regelkonform ist. MS Access lässt Sie deshalb bereits bei der Definition eines Formulars oder Steuerelements Gültigkeitsregeln formulieren. Die Gültigkeitsregel >="A" Und <="Z" stellt zum Beispiel sicher, dass die Bearbeiterin einer Zuordnungsaufgabe nur Buchstabenpräfices zwischen A und Z eingibt. Für ein konkretes Beispiel markieren Sie das Feld TxfBuchstabenpräfix des Unterformulars Subfrm Buchstabenalternativen, drücken »Alt/Enter und lesen den Wert der Eigenschaft Gültigkeitsregel.
Komplexe Gültigkeitsprüfungen müssen in VBA programmiert werden. Ein Beispiel ist die Validierung einer Matrikelnummer der Schweizer Universitäten. Die Matrikelnummer identifiziert jeden Studierenden zeitlich und räumlich eindeutig. Ihren Aufbau zeigt das folgende Beispiel. Gegeben sei die Matrikelnummer 72-836-596. Die einzelnen Ziffern haben die folgende Bedeutung:
Die Prüfziffer berechnet sich wie folgt:
Am Beispiel 72-836-596 lautet der Rechenweg:
Aus dem 4. Schritt ergibt sich die folgende Bedingung einer Matrikelnummer: "Die Summe aus Quersumme und Prüfziffer ist immer eine Zehnerzahl". Wir verwenden dies in der folgenden Funktion. Der VBA-Code geht nach den vier Schritten vor, ist aber komplexer als die entwurfssprachliche Lösung, weil er einige ungewohnte Funktionen und Operatoren verwendet und ausserdem temporäre Zwischenergebnisse im Datenfeld TmpMatr(1 To 7)verwaltet.
Private Function MatrikelGültig(ByVal Matrikel As String) As Boolean Dim TmpMatr(1 To 7) As String 'Zwischenspeicherung der Prüfziffer-losen Matrikel Dim i As Byte 'Index i läuft im Datenfeld TmpMatr von 1 bis 7 Dim Zahl, Quersumme As Byte If Len(Matrikel) = 8 Then 'Alle Matrikelnummern sind 8 Zeichen lang Quersumme = 0 For i = 1 To 7 'ohne Prüfziffer If i Mod 2 <> 0 Then '*** ungerade Ziffer '1. Ziffer verdoppeln TmpMatr(i) = CStr(CInt(Mid(Matrikel, i, 1)) * 2) '2. Zweistellige Verdoppelung als Quersumme darstellen If Len(TmpMatr(i)) > 1 Then TmpMatr(i) = CStr(CInt(Left(TmpMatr(i),1)) + CInt(Right(TmpMatr(i),1))) End If Else '*** gerade Ziffer TmpMatr(i) = Mid(Matrikel, i, 1) End If '3. Quersumme der Matrikel ohne Prüfziffer berechnen Quersumme = Quersumme + CInt(TmpMatr(i)) Next '-- 4. Ist (Quersumme + Prüfziffer) eine Zehnerzahl? If (Quersumme + CInt(Right(Matrikel, 1))) Mod 10 = 0 Then MatrikelGültig = True Exit Function End If End If MatrikelGültig = False End FunctionVerwendete vordefinierte Funktionen
len(Zeichenkette) berechnet die Anzahl Zeichen der Zeichenkette (string)
mid(Zeichenkette, i+1, 1) ergibt das i+i-te Zeichen der Zeichenkette
left(Zeichenkette, 1) ergibt das erste Zeichen der Zeichenkette
right(Zeichenkette, 1) ergibt das letzte Zeichen der Zeichenkette
Dividend mod Divisor ergibt den ganzzahligen Rest der Division von Dividend durch Divisor
CByte(Zeichenkette) ergibt den Byte-Wert (0 bis 255) der Zeichenkette
CStr(Zahl) ergibt den Str-Wert der Zahl